home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Just Call Me Internet
/
Just Call Me Internet.iso
/
prog
/
atari
/
c
/
du_lib
/
events.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-07-10
|
5KB
|
307 lines
/*
DU_LIB v2
Gem Window Management & Dialog Library For Lattice C
½1994, by Craig Graham.
Based on the DU_LIBv1 Library for HiSoft Basic.
*/
/*
Event & object handling
*/
#include "dulib.h"
#define KEY_CODES -1
#define DIALOG_LAYER_KEY_HANDLER -2
event Get_object_event(short dialog, short ob)
{
Elist *e;
e=NULL;
if (find_event(dialog,ob,&e))
{
return e->this_event;
}else{
return 0;
}
}
short Set_object_event(short dialog, short ob, event e)
{
Elist *n;
n=NULL;
if (!find_event(dialog,ob,&n))
n=new_event_struct(dialog,ob);
n->this_event=e;
return 0;
}
event Get_object_devent(short dialog, short ob)
{
Elist *e;
e=NULL;
if (find_event(dialog,ob,&e))
{
return e->this_devent;
}else{
return 0;
}
}
short Set_object_devent(short dialog, short ob, event e)
{
Elist *n;
n=NULL;
if (!find_event(dialog,ob,&n))
n=new_event_struct(dialog,ob);
n->this_devent=e;
return 0;
}
CallBack Get_object_callback(short dialog, short ob)
{
Elist *e;
e=NULL;
if (find_event(dialog,ob,&e))
{
return e->callback;
}else{
return 0;
}
}
short Set_object_callback(short dialog, short ob, CallBack c)
{
Elist *n;
n=NULL;
if (!find_event(dialog,ob,&n))
n=new_event_struct(dialog,ob);
n->callback=c;
return 0;
}
CallBack Get_object_dcallback(short dialog, short ob)
{
Elist *e;
e=NULL;
if (find_event(dialog,ob,&e))
{
return e->dcallback;
}else{
return 0;
}
}
short Set_object_dcallback(short dialog, short ob, CallBack c)
{
Elist *n;
n=NULL;
if (!find_event(dialog,ob,&n))
n=new_event_struct(dialog,ob);
n->dcallback=c;
return 0;
}
/*
Keyboard Processing Callbacks
*/
/* Specific Object Keyboard callbacks (Object Layer) */
CallBack Get_object_Kcallback(short dialog, short ob)
{
Elist *e;
e=NULL;
if (find_event(dialog,ob,&e))
{
return e->Kcallback;
}else{
return 0;
}
}
short Set_object_Kcallback(short dialog, short ob, CallBack c)
{
Elist *n;
n=NULL;
if (!find_event(dialog,ob,&n))
n=new_event_struct(dialog,ob);
n->Kcallback=c;
return 0;
}
/* Dialog related Callbacks (Dialog Layer) */
CallBack Get_dialog_Kcallback(short dialog)
{
Elist *e;
e=NULL;
if (find_event(dialog,DIALOG_LAYER_KEY_HANDLER,&e))
{
return e->Kcallback;
}else{
return 0;
}
}
short Set_dialog_Kcallback(short dialog, CallBack c)
{
Elist *n;
n=NULL;
if (!find_event(dialog, DIALOG_LAYER_KEY_HANDLER, &n))
n=new_event_struct(dialog, DIALOG_LAYER_KEY_HANDLER);
n->Kcallback=c;
return 0;
}
/* Key specific keyboard callbacks. (Application Global Layer) */
CallBack Get_key_callback(short key)
{
Elist *e;
e=NULL;
if (find_event(KEY_CODES,key,&e))
{
return e->Kcallback;
}else{
return 0;
}
}
short Set_key_callback(short key, CallBack c)
{
Elist *n;
n=NULL;
if (!find_event(KEY_CODES,key,&n))
n=new_event_struct(KEY_CODES,key);
n->Kcallback=c;
return 0;
}
/*
REDRAW FUNCTIONS
*/
CallBack Get_object_redraw(short dialog, short ob)
{
Elist *e;
e=NULL;
if (find_event(dialog,ob,&e))
{
return e->redraw;
}else{
return 0;
}
}
short Set_object_redraw(short dialog, short ob, CallBack c)
{
Elist *n;
n=NULL;
if (!find_event(dialog,ob,&n))
n=new_event_struct(dialog,ob);
n->redraw=c;
return 0;
}
/*
Support function for searching & inserting in the event/callback tables
*/
short find_event(short dialog, short ob, Elist *ee[])
{
short o;
Elist *e;
o=ob-1;
if (dialog!=KEY_CODES)
e=event_value[dialog];
else
e=key_values;
if (e!=NULL)
{
for(o=e->object; (e!=NULL)&&(o!=ob); )
{
o=e->object;
if (o!=ob) { e=e->next; }
}
}
ee[0]=e;
if (o!=ob)
{
return 0;
} else {
return 1;
}
}
/*
Create a new event structure for an object & initialise it to all disabled
*/
Elist* new_event_struct(short dialog, short ob)
{
Elist *n;
n=(Elist*)malloc(sizeof(Elist));
if (dialog!=KEY_CODES)
{
n->object=ob;
n->next=event_value[dialog];
event_value[dialog]=n;
}else{
n->object=ob; // for key codes, AES key code is passed in ob.
n->next=key_values;
key_values=n;
}
/* Initially, nothing actually in the event structure */
n->this_event=0; // Single click event
n->this_devent=0; // Double click event
n->callback=NULL; // Single click callback
n->dcallback=NULL; // Double click callback
n->redraw=NULL; // Redraw callback function
n->Kcallback=NULL; // Keyboard callback
n->stext.texts=NULL; // Scroll text
n->wtext.text=NULL; // Text widget
n->wtext.current_line=NULL;
n->wtext.display_baseline=NULL;
n->popup_form=0; // Icon popup
n->popup_icon_current=0; // Icon popup current icon
return n;
}